using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._LayersandTableViews
{
    /// <summary>
    /// <para>Make LAS Dataset Layer</para>
    /// <para>Creates a  LAS dataset layer that can apply  filters to LAS points and control the enforcement of surface constraint features.</para>
    /// <para>创建一个 LAS 数据集图层，该图层可将过滤器应用于 LAS 点并控制表面约束要素的实施。</para>
    /// </summary>    
    [DisplayName("Make LAS Dataset Layer")]
    public class MakeLasDatasetLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MakeLasDatasetLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_las_dataset">
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// </param>
        /// <param name="_out_layer">
        /// <para>Output Layer</para>
        /// <para>The name of the resulting LAS dataset layer. Any backslash or forward slash can be used to denote a group layer.</para>
        /// <para>生成的 LAS 数据集图层的名称。任何反斜杠或正斜杠都可用于表示图层组。</para>
        /// </param>
        public MakeLasDatasetLayer(object _in_las_dataset, object _out_layer)
        {
            this._in_las_dataset = _in_las_dataset;
            this._out_layer = _out_layer;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Make LAS Dataset Layer";

        public override string CallName => "management.MakeLasDatasetLayer";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_las_dataset, _out_layer, _class_code, _return_values, _no_flag.GetGPValue(), _synthetic.GetGPValue(), _keypoint.GetGPValue(), _withheld.GetGPValue(), _surface_constraints, _overlap.GetGPValue()];

        /// <summary>
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_dataset { get; set; }


        /// <summary>
        /// <para>Output Layer</para>
        /// <para>The name of the resulting LAS dataset layer. Any backslash or forward slash can be used to denote a group layer.</para>
        /// <para>生成的 LAS 数据集图层的名称。任何反斜杠或正斜杠都可用于表示图层组。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_layer { get; set; }


        /// <summary>
        /// <para>Class Codes</para>
        /// <para><xdoc>
        ///   <para>Allows the filtering of LAS points by classification codes. The range of valid values will depend on the class codes supported by the version of LAS files referenced by the LAS dataset. All class codes will be selected by default.</para>
        ///   <bulletList>
        ///     <bullet_item>0—Never processed by a classification method</bullet_item><para/>
        ///     <bullet_item>1—Processed by a classification method but could not be determined</bullet_item><para/>
        ///     <bullet_item>2—Bare earth measurements</bullet_item><para/>
        ///     <bullet_item>3—Vegetation whose height is considered to be low for the area</bullet_item><para/>
        ///     <bullet_item>4—Vegetation whose height is considered to be intermediate for the area</bullet_item><para/>
        ///     <bullet_item>5—Vegetation whose height is considered to be high for the area</bullet_item><para/>
        ///     <bullet_item>6—Structure with roof and walls</bullet_item><para/>
        ///     <bullet_item>7—Erroneous or undesirable data that is closer to the ground</bullet_item><para/>
        ///     <bullet_item>8—Reserved for later use, but used for model key points in LAS 1.1 - 1.3</bullet_item><para/>
        ///     <bullet_item>9—Water</bullet_item><para/>
        ///     <bullet_item>10—Railway tracks used by trains</bullet_item><para/>
        ///     <bullet_item>11—Road surfaces</bullet_item><para/>
        ///     <bullet_item>12—Reserved for later use, but used for overlap points in LAS 1.1 - 1.3</bullet_item><para/>
        ///     <bullet_item>13—Shielding around electrical wires</bullet_item><para/>
        ///     <bullet_item>14—Power lines</bullet_item><para/>
        ///     <bullet_item>15—A lattice tower used to support an overhead power line</bullet_item><para/>
        ///     <bullet_item>16—A mechanical assembly that joins an electrical circuit</bullet_item><para/>
        ///     <bullet_item>17—The surface of a bridge</bullet_item><para/>
        ///     <bullet_item>18—Erroneous or undesirable data that is far from the ground</bullet_item><para/>
        ///     <bullet_item>19 - 63—Reserved class codes for ASPRS designation.</bullet_item><para/>
        ///     <bullet_item>64 - 255—User-definable class codes.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>允许按分类代码过滤 LAS 点。有效值的范围将取决于 LAS 数据集引用的 LAS 文件版本支持的类代码。默认情况下，将选择所有类代码。</para>
        ///   <bulletList>
        ///     <bullet_item>0 - 从不通过分类方法进行处理</bullet_item><para/>
        ///     <bullet_item>1 - 通过分类方法处理但无法确定</bullet_item><para/>
        ///     <bullet_item>2 - 裸地测量</bullet_item><para/>
        ///     <bullet_item>3 - 高度被认为对区域较低</bullet_item><para/>
        ///     <bullet_item>4 - 高度被视为该区域中间的植被</bullet_item><para/>
        ///     <bullet_item>5 - 该区域高度被认为较高的植被</bullet_item><para/>
        ///     <bullet_item>6 - 带屋顶和墙壁的结构</bullet_item><para/>
        ///     <bullet_item>7 - 更接近地面的错误或不需要的数据</bullet_item><para/>
        ///     <bullet_item>8 - 保留供以后使用，但用于 LAS 1.1 - 1.3 中的模型关键点</bullet_item><para/>
        ///     <bullet_item>9—水</bullet_item><para/>
        ///     <bullet_item>10 - 火车使用的铁轨</bullet_item><para/>
        ///     <bullet_item>11 - 路面</bullet_item><para/>
        ///     <bullet_item>12 - 保留供以后使用，但用于 LAS 1.1 - 1.3 中的重叠点</bullet_item><para/>
        ///     <bullet_item>13 - 电线周围的屏蔽</bullet_item><para/>
        ///     <bullet_item>14—电源线</bullet_item><para/>
        ///     <bullet_item>15 - 用于支撑架空电力线的格子塔</bullet_item><para/>
        ///     <bullet_item>16 - 连接电路的机械组件</bullet_item><para/>
        ///     <bullet_item>17 - 桥的表面</bullet_item><para/>
        ///     <bullet_item>18 - 远离地面的错误或不需要的数据</bullet_item><para/>
        ///     <bullet_item>19 - 63 - 用于 ASPRS 指定的保留类代码。</bullet_item><para/>
        ///     <bullet_item>64 - 255 - 用户可定义的类代码。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Class Codes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _class_code { get; set; } = null;


        /// <summary>
        /// <para>Return Values</para>
        /// <para><xdoc>
        ///   <para>The return values to be used for filtering LAS points. When no value is specified, all returns are used.</para>
        ///   <bulletList>
        ///     <bullet_item>Last Return—Last return</bullet_item><para/>
        ///     <bullet_item>First of Many Returns—First of many</bullet_item><para/>
        ///     <bullet_item>Last of Many Returns—Last of many</bullet_item><para/>
        ///     <bullet_item>Single Return—Single return</bullet_item><para/>
        ///     <bullet_item>1st Return—1st Return</bullet_item><para/>
        ///     <bullet_item>2nd Return—2nd Return</bullet_item><para/>
        ///     <bullet_item>3rd Return—3rd Return</bullet_item><para/>
        ///     <bullet_item>4th Return—4th Return</bullet_item><para/>
        ///     <bullet_item>5th Return—5th Return</bullet_item><para/>
        ///     <bullet_item>6th Return—6th Return</bullet_item><para/>
        ///     <bullet_item>7th Return—7th Return</bullet_item><para/>
        ///     <bullet_item>8th Return—8th Return</bullet_item><para/>
        ///     <bullet_item>9th Return—9th Return</bullet_item><para/>
        ///     <bullet_item>10th Return—10th Return</bullet_item><para/>
        ///     <bullet_item>11th Return—11th Return</bullet_item><para/>
        ///     <bullet_item>12th Return—12th Return</bullet_item><para/>
        ///     <bullet_item>13th Return—13th Return</bullet_item><para/>
        ///     <bullet_item>14th Return—14th Return</bullet_item><para/>
        ///     <bullet_item>15th Return—15th Return</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于过滤 LAS 点的返回值。如果未指定任何值，则使用所有返回值。</para>
        ///   <bulletList>
        ///     <bullet_item>上次返回 - 最后一次返回</bullet_item><para/>
        ///     <bullet_item>许多回报中的第一次——许多回报中的第一次</bullet_item><para/>
        ///     <bullet_item>最后一次回归——最后一次回归</bullet_item><para/>
        ///     <bullet_item>单次回程 - 单次回程</bullet_item><para/>
        ///     <bullet_item>第一次返回 - 第一次返回</bullet_item><para/>
        ///     <bullet_item>第二次返回—第二次返回</bullet_item><para/>
        ///     <bullet_item>第三次返回—第三次返回</bullet_item><para/>
        ///     <bullet_item>第四次回归—第四次回归</bullet_item><para/>
        ///     <bullet_item>第5次回归—第5次回归</bullet_item><para/>
        ///     <bullet_item>第6次回归—第6次回归</bullet_item><para/>
        ///     <bullet_item>第7次回归—第7次回归</bullet_item><para/>
        ///     <bullet_item>第8次回归—第8次回归</bullet_item><para/>
        ///     <bullet_item>第9次回归—第9次回归</bullet_item><para/>
        ///     <bullet_item>第10次回归—第10次回归</bullet_item><para/>
        ///     <bullet_item>第11次回归—第11次回归</bullet_item><para/>
        ///     <bullet_item>第12次回归—第12次回归</bullet_item><para/>
        ///     <bullet_item>第13次回归—第13次回归</bullet_item><para/>
        ///     <bullet_item>第14次回归—第14次回归</bullet_item><para/>
        ///     <bullet_item>第15次回归—第15次回归</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Return Values")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _return_values { get; set; } = null;


        /// <summary>
        /// <para>Unflagged Points</para>
        /// <para><xdoc>
        ///   <para>Specifies whether data points that do not have any classification flags assigned should be enabled for display and analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Unflagged points will be displayed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Unflagged points will not be displayed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否应启用未分配任何分类标志的数据点以进行显示和分析。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将显示未标记的点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不显示未标记的点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Unflagged Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _no_flag_value _no_flag { get; set; } = _no_flag_value._true;

        public enum _no_flag_value
        {
            /// <summary>
            /// <para>INCLUDE_UNFLAGGED</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_UNFLAGGED")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_UNFLAGGED</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_UNFLAGGED")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Synthetic Points</para>
        /// <para><xdoc>
        ///   <para>Specifies whether data points flagged as synthetic, or points that originated from a data source other than lidar, should be enabled for display and analysis..</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Synthetic points will be displayed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Synthetic points will not be displayed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否应启用标记为合成的数据点或源自激光雷达以外的数据源的数据点进行显示和分析。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将显示合成点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不显示合成点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Synthetic Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _synthetic_value _synthetic { get; set; } = _synthetic_value._true;

        public enum _synthetic_value
        {
            /// <summary>
            /// <para>INCLUDE_SYNTHETIC</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_SYNTHETIC")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_SYNTHETIC</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_SYNTHETIC")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Model Key-Point</para>
        /// <para><xdoc>
        ///   <para>Specifies whether data points flagged as model key points, or significant measurements that should not be thinned away, should be enabled for display and analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Model key points will be displayed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Model key points will not be displayed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否应启用标记为模型关键点的数据点或不应细化的重要测量值以进行显示和分析。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将显示模型关键点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不显示模型关键点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Model Key-Point")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _keypoint_value _keypoint { get; set; } = _keypoint_value._true;

        public enum _keypoint_value
        {
            /// <summary>
            /// <para>INCLUDE_KEYPOINT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_KEYPOINT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_KEYPOINT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_KEYPOINT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Withheld Points</para>
        /// <para><xdoc>
        ///   <para>Specifies whether data points flagged as withheld, which typically represent unwanted noise measurements, should be enabled for display and analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—Withheld points will not be displayed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—Withheld points will be displayed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否应启用标记为保留的数据点（通常表示不需要的噪声测量值）以进行显示和分析。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不显示预留点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将显示保留点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Withheld Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _withheld_value _withheld { get; set; } = _withheld_value._false;

        public enum _withheld_value
        {
            /// <summary>
            /// <para>INCLUDE_WITHHELD</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_WITHHELD")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_WITHHELD</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_WITHHELD")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Surface Constraints</para>
        /// <para>The name of the surface constraint features that will be enabled in the layer. All constraints are enabled by default.</para>
        /// <para>将在图层中启用的曲面约束要素的名称。默认情况下，所有约束都处于启用状态。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Surface Constraints")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _surface_constraints { get; set; } = null;


        /// <summary>
        /// <para>Overlap Points</para>
        /// <para><xdoc>
        ///   <para>Specifies whether data points flagged as overlap should be enabled for display and analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Overlap points will be displayed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Overlap points will not be displayed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否应启用标记为重叠的数据点以进行显示和分析。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将显示重叠点。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不显示重叠点。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Overlap Points")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _overlap_value _overlap { get; set; } = _overlap_value._true;

        public enum _overlap_value
        {
            /// <summary>
            /// <para>INCLUDE_OVERLAP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INCLUDE_OVERLAP")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>EXCLUDE_OVERLAP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("EXCLUDE_OVERLAP")]
            [GPEnumValue("false")]
            _false,

        }

        public MakeLasDatasetLayer SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}